package com.vhans.db.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.vhans.core.domain.BUser;
import com.vhans.db.model.dto.ConditionDTO;
import com.vhans.db.model.dto.DisableDTO;
import com.vhans.db.model.dto.EmailDTO;
import com.vhans.db.model.dto.user.UserDTO;
import com.vhans.db.model.dto.user.UserInfoDTO;
import com.vhans.db.model.dto.user.UserPasswdDTO;
import com.vhans.db.model.vo.agreement.MyAgreement;
import com.vhans.db.model.vo.comment.CommentVO;
import com.vhans.db.model.vo.quiz.QuizInfoVO;
import com.vhans.db.model.vo.quiz.QuizVO;
import com.vhans.db.model.vo.record.RecordInfoVO;
import com.vhans.db.model.vo.record.RecordVO;
import com.vhans.db.model.vo.user.OnlineUserVO;
import com.vhans.db.model.vo.user.UserInfoVO;
import com.vhans.db.model.vo.user.UserVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 用户业务接口
 *
 * @author vhans
 **/
public interface IBUserService extends IService<BUser> {

    /**
     * 获取用户列表
     *
     * @return 用户列表
     */
    List<UserVO> listUser(ConditionDTO condition);

    /**
     * 获取登录用户信息
     *
     * @return 用户信息
     */
    UserInfoVO getUserInfo();

    /**
     * 获取登录用户发布的约起
     *
     * @return 发布的约起
     */
    List<MyAgreement> getIssueAgreement();

    /**
     * 获取登录用户参与的约起
     *
     * @return 参与的约起
     */
    List<MyAgreement> getTakeAgreement();

    /**
     * 获取登录用户发表的记录
     *
     * @return 发表的记录
     */
    List<RecordVO> getIssueRecord();

    /**
     * 获取登录用户发表的题目
     *
     * @return 发表的题目
     */
    List<QuizVO> getIssueQuiz();

    /**
     * 获取登录用户收藏的记录
     *
     * @return 收藏的记录
     */
    List<RecordInfoVO> getCollectRecord();

    /**
     * 获取登录用户收藏的题目
     *
     * @return 收藏的题目
     */
    List<QuizInfoVO> getCollectQuiz();

    /**
     * 获取登录用户点赞的记录
     *
     * @return 点赞的记录
     */
    List<RecordInfoVO> getLikeRecord();

    /**
     * 获取登录用户点赞的题目
     *
     * @return 点赞的题目
     */
    List<QuizInfoVO> getLikeQuiz();

    /**
     * 获取登录用户点赞的评论
     *
     * @return 点赞的评论
     */
    List<CommentVO> getLikeComment();

    /**
     * 修改用户
     *
     * @param user 用户信息
     */
    void updateUser(UserDTO user);

    /**
     * 修改用户状态
     *
     * @param disable 禁用信息
     */
    void updateUserStatus(DisableDTO disable);

    /**
     * 查看在线用户列表
     *
     * @param condition 条件
     * @return 在线用户列表
     */
    List<OnlineUserVO> listOnlineUser(ConditionDTO condition);

    /**
     * 下线用户
     *
     * @param token 在线token
     */
    void kickOutUser(String token);

    /**
     * 修改用户邮箱
     *
     * @param email 邮箱信息
     */
    void updateUserEmail(EmailDTO email);

    /**
     * 修改用户头像
     *
     * @param file 头像
     * @return 头像链接
     */
    String updateUserAvatar(MultipartFile file);

    /**
     * 更新用户信息
     *
     * @param userInfo 用户信息
     */
    void updateUserInfo(UserInfoDTO userInfo);

    /**
     * 修改用户密码
     *
     * @param user 用户密码
     */
    void updatePassword(UserPasswdDTO user);

    /**
     * 重置用户密码为123456
     *
     * @param userId 用户ID
     */
    void resetPassword(Integer userId);
}
